Emoji chooser: Use icons for sections
authorMatthias Clasen <mclasen@redhat.com>
Thu, 19 Jul 2018 21:24:11 +0000 (17:24 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 29 Jul 2018 13:02:07 +0000 (09:02 -0400)
This is more reliable than using text-style Emoji
which may not be present.

Based on work by Julian Sparber.

gtk/gtkemojichooser.c
gtk/ui/gtkemojichooser.ui

index ee17ea3cf18f44fe04312c5dab2dfa0cd7179996..b2c161e38157b078153191b12f0c46e26b2500fc 100644 (file)
@@ -622,19 +622,15 @@ static void
 setup_section (GtkEmojiChooser *chooser,
                EmojiSection   *section,
                const char     *first,
-               gunichar        label)
+               const char     *icon)
 {
-  char text[14];
-  char *p;
   GtkAdjustment *adj;
+  GtkWidget *image;
 
   section->first = first;
 
-  p = text;
-  p += g_unichar_to_utf8 (label, p);
-  p += g_unichar_to_utf8 (0xfe0e, p);
-  p[0] = 0;
-  gtk_button_set_label (GTK_BUTTON (section->button), text);
+  image = gtk_bin_get_child (GTK_BIN (section->button));
+  gtk_image_set_from_icon_name (GTK_IMAGE (image), icon, GTK_ICON_SIZE_BUTTON);
 
   adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (chooser->scrolled_window));
 
@@ -694,16 +690,16 @@ gtk_emoji_chooser_init (GtkEmojiChooser *chooser)
   adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (chooser->scrolled_window));
   g_signal_connect (adj, "value-changed", G_CALLBACK (adj_value_changed), chooser);
 
-  setup_section (chooser, &chooser->recent, NULL, 0x1f557);
-  setup_section (chooser, &chooser->people, "grinning face", 0x1f642);
-  setup_section (chooser, &chooser->body, "selfie", 0x1f44d);
-  setup_section (chooser, &chooser->nature, "monkey face", 0x1f337);
-  setup_section (chooser, &chooser->food, "grapes", 0x1f374);
-  setup_section (chooser, &chooser->travel, "globe showing Europe-Africa", 0x2708);
-  setup_section (chooser, &chooser->activities, "jack-o-lantern", 0x1f3c3);
-  setup_section (chooser, &chooser->objects, "muted speaker", 0x1f514);
-  setup_section (chooser, &chooser->symbols, "ATM sign", 0x2764);
-  setup_section (chooser, &chooser->flags, "chequered flag", 0x1f3f4);
+  setup_section (chooser, &chooser->recent, NULL, "emoji-recent-symbolic");
+  setup_section (chooser, &chooser->people, "grinning face", "emoji-people-symbolic");
+  setup_section (chooser, &chooser->body, "selfie", "emoji-body-symbolic");
+  setup_section (chooser, &chooser->nature, "monkey face", "emoji-nature-symbolic");
+  setup_section (chooser, &chooser->food, "grapes", "emoji-food-symbolic");
+  setup_section (chooser, &chooser->travel, "globe showing Europe-Africa", "emoji-travel-symbolic");
+  setup_section (chooser, &chooser->activities, "jack-o-lantern", "emoji-activities-symbolic");
+  setup_section (chooser, &chooser->objects, "muted speaker", "emoji-objects-symbolic");
+  setup_section (chooser, &chooser->symbols, "ATM sign", "emoji-symbols-symbolic");
+  setup_section (chooser, &chooser->flags, "chequered flag", "emoji-flags-symbolic");
 
   populate_emoji_chooser (chooser);
   populate_recent_section (chooser);
index 0de6834d6cdc81b1ba18c741ce527429b161fd3f..e541e630864b21863d72d94093465d7d564d9bac 100644 (file)
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="recent.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="people.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="body.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="nature.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="food.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="travel.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="activities.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="objects.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="symbols.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                     <child>
                         <style>
                           <class name="emoji-section"/>
                         </style>
+                        <child>
+                          <object class="GtkImage" id="flags.icon">
+                            <property name="visible">1</property>
+                          </object>
+                        </child>
                       </object>
                     </child>
                   </object>